Multiple Inheritance
The next
example illustrates the use of C++ multiple inheritance. There are two
disadvantages to using multiple inheritance with OLE. First, it is not possible
to have an interface-level reference count. For more information about
reference counting, see Chapter 2, The Component Object Model. Second, there
is the potential for confusion over the interpretation of the class statement.
A standard C++ multiple inheritance declaration implies the is a relationship
where an object inherits implementations. In OLE, however, interfaces are
attributes of the object and implementations are not inherited.
The main
advantage to using multiple inheritance lies in its simplicity. Only the
prototypes for each of the interface methods are listed; no interface data
structures or class definitions are necessary.
Because both
InterfaceA and InterfaceB inherit from IUnknown
class CObj :
public InterfaceA, public InterfaceB
{
private:
ULONG m_ObjRefCount;
LPSTORAGE m_pStg;
LPOLEOBJECT m_pOleObj;
CDOC *
m_pCDoc;
public:
CObj();
~CObj();
HRESULT
QueryInterface(REFIID riid, LPVOID *
ppvObj)
ULONG
AddRef(void) { return ++m_ObjRefCount; }
ULONG
Release(void);
HRESULT
MethodA1(LPVOID * ppvObj);
HRESULT
MethodA2(DWORD dwArg);
HRESULT
MethodB1(void);
HRESULT
MethodB2(DWORD dwArg1, DWORD dwArg2);
};
APPENDIX A